listbox: Set activate_signal on listboxrow class
authorAlexander Larsson <alexl@redhat.com>
Tue, 10 Sep 2013 12:12:07 +0000 (14:12 +0200)
committerAlexander Larsson <alexl@redhat.com>
Tue, 10 Sep 2013 14:20:56 +0000 (16:20 +0200)
keyboard navigation didn't support activation since we moved
the keynav to the child row widgets. We fix this by adding a
activate signal handler for the row and setting
widget_class->activate_signal to it.

https://bugzilla.gnome.org/show_bug.cgi?id=707778

gtk/gtklistbox.c
gtk/gtklistbox.h

index 9d2d07141aa53130e3ebd6aef6f14bb282be7c85..1d9d59401faf676c4273357f675bc85e3eba7c88 100644 (file)
@@ -109,6 +109,11 @@ enum {
   LAST_SIGNAL
 };
 
+enum {
+  ROW__ACTIVATE,
+  ROW__LAST_SIGNAL
+};
+
 enum  {
   PROP_0,
   PROP_SELECTION_MODE,
@@ -206,6 +211,7 @@ static void                 gtk_list_box_real_get_preferred_width_for_height (Gt
 
 static GParamSpec *properties[LAST_PROPERTY] = { NULL, };
 static guint signals[LAST_SIGNAL] = { 0 };
+static guint row_signals[ROW__LAST_SIGNAL] = { 0 };
 
 /**
  * gtk_list_box_new:
@@ -2466,6 +2472,17 @@ gtk_list_box_row_real_focus (GtkWidget        *widget,
     }
 }
 
+static void
+gtk_list_box_row_real_activate (GtkListBoxRow *row)
+{
+  GtkListBox *list_box;
+
+  list_box = gtk_list_box_row_get_box (row);
+  if (list_box)
+    gtk_list_box_select_and_activate (list_box, row);
+}
+
+
 static void
 gtk_list_box_row_real_show (GtkWidget *widget)
 {
@@ -2792,4 +2809,16 @@ gtk_list_box_row_class_init (GtkListBoxRowClass *klass)
   widget_class->get_preferred_width_for_height = gtk_list_box_row_real_get_preferred_width_for_height;
   widget_class->size_allocate = gtk_list_box_row_real_size_allocate;
   widget_class->focus = gtk_list_box_row_real_focus;
+
+  klass->activate = gtk_list_box_row_real_activate;
+
+  row_signals[ROW__ACTIVATE] =
+    g_signal_new (I_("activate"),
+                  G_OBJECT_CLASS_TYPE (object_class),
+                  G_SIGNAL_RUN_FIRST | G_SIGNAL_ACTION,
+                  G_STRUCT_OFFSET (GtkListBoxRowClass, activate),
+                  NULL, NULL,
+                  _gtk_marshal_VOID__VOID,
+                  G_TYPE_NONE, 0);
+  widget_class->activate_signal = row_signals[ROW__ACTIVATE];
 }
index f0e569c265cf208384cbd956c8bf95180ea8c761..8d425ff244025ab48135d83d137228f9df2d23fa 100644 (file)
@@ -88,10 +88,11 @@ struct _GtkListBoxRowClass
 {
   GtkBinClass parent_class;
 
+  void (* activate) (GtkListBoxRow *row);
+
   /* Padding for future expansion */
   void (*_gtk_reserved1) (void);
   void (*_gtk_reserved2) (void);
-  void (*_gtk_reserved3) (void);
 };
 
 /**